🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / connections / src / commonMain / kotlin / org / meshtastic / feature / connections / ui / components / DeviceListItem.kt
Displaying Raw • Download
feature/connections/src/commonMain/kotlin/org/meshtastic/feature/connections/ui/components/DeviceListItem.kt e85300531e124df08788c1b765d50af1bf6d516d (e8530053) Text, 6.35 KB
T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.connections.ui.components
Tff7b72import T7ee787androidx.compose.foundation.ExperimentalFoundationApi
Tff7b72import T7ee787androidx.compose.foundation.clickable
Tff7b72import T7ee787androidx.compose.foundation.combinedClickable
Tff7b72import T7ee787androidx.compose.foundation.layout.Arrangement
Tff7b72import T7ee787androidx.compose.foundation.layout.Row
Tff7b72import T7ee787androidx.compose.foundation.layout.fillMaxWidth
Tff7b72import T7ee787androidx.compose.foundation.layout.padding
Tff7b72import T7ee787androidx.compose.foundation.layout.size
Tff7b72import T7ee787androidx.compose.material3.CircularProgressIndicator
Tff7b72import T7ee787androidx.compose.material3.Icon
Tff7b72import T7ee787androidx.compose.material3.ListItem
Tff7b72import T7ee787androidx.compose.material3.ListItemDefaults
Tff7b72import T7ee787androidx.compose.material3.MaterialTheme
Tff7b72import T7ee787androidx.compose.material3.RadioButton
Tff7b72import T7ee787androidx.compose.material3.Text
Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.mutableIntStateOf
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.setValue
Tff7b72import T7ee787androidx.compose.ui.Alignment
Tff7b72import T7ee787androidx.compose.ui.Modifier
Tff7b72import T7ee787androidx.compose.ui.graphics.Color
Tff7b72import T7ee787androidx.compose.ui.unit.dp
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787org.jetbrains.compose.resources.stringResource
Tff7b72import T7ee787org.meshtastic.core.model.ConnectionState
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.add
Tff7b72import T7ee787org.meshtastic.core.resources.bluetooth
Tff7b72import T7ee787org.meshtastic.core.resources.network
Tff7b72import T7ee787org.meshtastic.core.resources.serial
Tff7b72import T7ee787org.meshtastic.core.ui.component.NodeChip
Tff7b72import T7ee787org.meshtastic.core.ui.component.Rssi
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Add
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Bluetooth
Tff7b72import T7ee787org.meshtastic.core.ui.icon.BluetoothConnected
Tff7b72import T7ee787org.meshtastic.core.ui.icon.BluetoothSearching
Tff7b72import T7ee787org.meshtastic.core.ui.icon.MeshtasticIcons
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Usb
Tff7b72import T7ee787org.meshtastic.core.ui.icon.Wifi
Tff7b72import T7ee787org.meshtastic.feature.connections.model.DeviceListEntry
Tff7b72private Tff7b72const Tff7b72val Te6edf3RSSI_UPDATE_RATE_MS Tff7b72= T79c0ff2T79c0ff0T79c0ff0T79c0ff0L
Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalFoundationApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tf0883e@Composable
Tff7b72fun Td2a8ffDeviceListItemTb4b4b4(
Te6edf3connectionStateTb4b4b4: Te6edf3ConnectionStateTb4b4b4,
Te6edf3deviceTb4b4b4: Te6edf3DeviceListEntryTb4b4b4,
Te6edf3onSelectTb4b4b4: Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3modifierTb4b4b4: Te6edf3Modifier Tff7b72= Te6edf3ModifierTb4b4b4,
Te6edf3onDeleteTb4b4b4: Tb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4)Tff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3rssiTb4b4b4: Tffa657Int? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4) Tb4b4b4{
T8b949e// Throttle the RSSI updates to match the connected device polling rate
Tff7b72var Te6edf3displayedRssi Tff7b72by Te6edf3remember Tb4b4b4{ Te6edf3mutableIntStateOfTb4b4b4(Te6edf3rssi Tff7b72?: T79c0ff0Tb4b4b4) Tb4b4b4}
Te6edf3LaunchedEffectTb4b4b4(Te6edf3rssiTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3displayedRssi Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3displayedRssi Tff7b72= Te6edf3rssi Tff7b72?: T79c0ff0
Tb4b4b4}
Tb4b4b4}
Te6edf3LaunchedEffectTb4b4b4(Tffa657UnitTb4b4b4) Tb4b4b4{
Tff7b72while Tb4b4b4(Tff7b72trueTb4b4b4) Tb4b4b4{
Te6edf3delayTb4b4b4(Te6edf3RSSI_UPDATE_RATE_MSTb4b4b4)
Te6edf3displayedRssi Tff7b72= Te6edf3rssi Tff7b72?: T79c0ff0
Tb4b4b4}
Tb4b4b4}
Tff7b72val Te6edf3icon Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3deviceTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Ble Tff7b72-Tff7b72>
Tff7b72if Tb4b4b4(Te6edf3connectionState Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4) Tb4b4b4{
Te6edf3MeshtasticIconsTb4b4b4.Te6edf3BluetoothConnected
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3connectionState Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectingTb4b4b4) Tb4b4b4{
Te6edf3MeshtasticIconsTb4b4b4.Te6edf3BluetoothSearching
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Bluetooth
Tb4b4b4}
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Usb Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Usb
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Tcp Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Wifi
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Mock Tff7b72-Tff7b72> Te6edf3MeshtasticIconsTb4b4b4.Te6edf3Add
Tb4b4b4}
Tff7b72val Te6edf3contentDescription Tff7b72=
Tff7b72when Tb4b4b4(Te6edf3deviceTb4b4b4) Tb4b4b4{
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Ble Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3bluetoothTb4b4b4)
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Usb Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3serialTb4b4b4)
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Tcp Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3networkTb4b4b4)
Tff7b72is Te6edf3DeviceListEntryTb4b4b4.Te6edf3Mock Tff7b72-Tff7b72> Te6edf3stringResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3addTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3clickableModifier Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3onDelete Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3ModifierTb4b4b4.Te6edf3combinedClickableTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onSelectTb4b4b4, Te6edf3onLongClick Tff7b72= Te6edf3onDeleteTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3ModifierTb4b4b4.Te6edf3clickableTb4b4b4(Te6edf3onClick Tff7b72= Te6edf3onSelectTb4b4b4)
Tb4b4b4}
Te6edf3ListItemTb4b4b4(
Te6edf3modifier Tff7b72= Te6edf3modifierTb4b4b4.Te6edf3fillMaxWidthTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3thenTb4b4b4(Te6edf3clickableModifierTb4b4b4)Tb4b4b4.Te6edf3paddingTb4b4b4(Te6edf3vertical Tff7b72= T79c0ff4.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3headlineContent Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3deviceTb4b4b4.Te6edf3nodeTff7b72?.Te6edf3let Tb4b4b4{ Te6edf3node Tff7b72-Tff7b72> Te6edf3NodeChipTb4b4b4(Te6edf3node Tff7b72= Te6edf3nodeTb4b4b4) Tb4b4b4}
Tff7b72?: Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3deviceTb4b4b4.Te6edf3nameTb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3titleLargeTb4b4b4)
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3leadingContent Tff7b72= Tb4b4b4{
Te6edf3IconTb4b4b4(
Te6edf3imageVector Tff7b72= Te6edf3iconTb4b4b4,
Te6edf3contentDescription Tff7b72= Te6edf3contentDescriptionTb4b4b4,
Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff3T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4,
Te6edf3tint Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3connectionState Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4) Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3primary
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3MaterialThemeTb4b4b4.Te6edf3colorSchemeTb4b4b4.Te6edf3onSurfaceVariant
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}Tb4b4b4,
Te6edf3supportingContent Tff7b72= Tb4b4b4{ Te6edf3TextTb4b4b4(Te6edf3text Tff7b72= Te6edf3deviceTb4b4b4.Te6edf3addressTb4b4b4, Te6edf3style Tff7b72= Te6edf3MaterialThemeTb4b4b4.Te6edf3typographyTb4b4b4.Te6edf3bodyLargeTb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3trailingContent Tff7b72= Tb4b4b4{
Te6edf3RowTb4b4b4(Te6edf3verticalAlignment Tff7b72= Te6edf3AlignmentTb4b4b4.Te6edf3CenterVerticallyTb4b4b4, Te6edf3horizontalArrangement Tff7b72= Te6edf3ArrangementTb4b4b4.Te6edf3spacedByTb4b4b4(T79c0ff1T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3rssi Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3RssiTb4b4b4(Te6edf3rssi Tff7b72= Te6edf3displayedRssiTb4b4b4)
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3connectionState Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectingTb4b4b4) Tb4b4b4{
Te6edf3CircularProgressIndicatorTb4b4b4(Te6edf3modifier Tff7b72= Te6edf3ModifierTb4b4b4.Te6edf3sizeTb4b4b4(T79c0ff3T79c0ff2.Te6edf3dpTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3RadioButtonTb4b4b4(Te6edf3selected Tff7b72= Te6edf3connectionState Tff7b72is Te6edf3ConnectionStateTb4b4b4.Te6edf3ConnectedTb4b4b4, Te6edf3onClick Tff7b72= Tff7b72nullTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3colors Tff7b72= Te6edf3ListItemDefaultsTb4b4b4.Te6edf3colorsTb4b4b4(Te6edf3containerColor Tff7b72= Te6edf3ColorTb4b4b4.Te6edf3TransparentTb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Served by rngit 1.5.4 - Generated in 0.1s